GitHub Codespaces上でAWS CLIをIAM Identity Center(AWS SSO)で認証する際のハマりどころ

GitHub Codespaces上でAWS CLIをIAM Identity Center(AWS SSO)で認証する際のハマりどころ

GitHub Codespaces上でAWS CLIをAWS SSOで設定できない場合はレガシー設定も検討してみましょう。
Clock Icon2024.12.26

こんにちは。リテールアプリ共創部のきんじょーです。

GitHub Codespaces 上で、AWS CLI の認証情報を、IAM Identity Center(AWS SSO)を用いて設定した際に、認証情報が一筋縄では設定できませんでした。
発生した事象と原因、その解決策をご紹介します。

AWS CLIを用いて、IAM Identity Center(AWS SSO)の設定をする方法の詳細については、下記の記事を参考にしてください。

https://dev.classmethod.jp/articles/aws-cli-for-iam-identity-center-sso/

発生した事象

IAM Identity Center(AWS SSO)を用いて AWS CLI の認証情報を設定する方法は 2 つ用意されています。

  1. (推奨) SSO トークンプロバイダー設定
  2. 更新不可のレガシー設定

前者はSSO ユーザーのセッション管理とトークンの自動更新がサポートされ、AWS が推奨している方法です。
IAM Identity Center側で連携しているIdPによりますが、認証時にOAuth2.0 の認可コードフローが用いられる場合、Codespaces上に立ち上げたサーバーに戻って来れずに認証情報が設定できない問題が発生しました。

ローカル環境で AWS CLI の認証を行う場合

認可コードフローを経て、ローカル環境でAWS CLIが立ち上げたサーバーにリダイレクトされ、特に問題は発生しません。

Codespaces 上で AWS SSO を用いたログインを行う場合

一方、Codespaces上で立ち上げたサーバーには、ポートフォワーディングされたURLでアクセスする必要があります。
認証開始時のredirect_uriは変更できないため、リダイレクトで認可コードを受け取ることができません。

下記⑧と⑨の間で127.0.0.1からポートフォワーディングされたURLに手動で変更すれば設定可能ですが、実運用上の問題があります。

解決策

後者のレガシー更新不可設定を用いると、OAuth2.0を回避しCLI上で表示された認証コードを入力するフローで設定が可能です。

$ aws configure sso
SSO session name (Recommended):  # <-設定しない
WARNING: Configuring using legacy format (e.g. without an SSO session).
Consider re-running "configure sso" command and providing a session name.
SSO start URL [https://d-1234.awsapps.com/start]:
SSO region [ap-northeast-1]:
Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://device.sso.ap-northeast-1.amazonaws.com/

Then enter the code:

LTMV-HGPW
The only AWS account available to you is: 123456789012
Using the account ID 123456789012
The only role available to you is: ViewOnlyAccess
Using the role name "ViewOnlyAccess"
CLI default client Region [ap-northeast-1]:

ブラウザが立ち上がりSSOの認証画面が表示されます。
open-sso-url.png

認証コードを入力します。
enter-auth-code.png

データアクセスの同意画面が表示されます。
confirm-data-access.png

リクエストが承認されたらこの画面を閉じます。
approve-request.png

この方法をとった場合、トークンの自動更新やセッション管理ができなくなる点には注意が必要です。

この記事が誰かの役に立つと幸いです。
以上。リテールアプリ共創部のきんじょーでした。

参考

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-sso.html

https://docs.aws.amazon.com/ja_jp/sdkref/latest/guide/feature-sso-credentials.html#sso-token-config

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.